package org.myioc.util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.myioc.entity.Bean;
import org.myioc.entity.property;

public class XMLconfig {

	//读取XML文件生成一个list，为bean的对象的集合
	public static List<Bean> readXML(String path){
		//初始化list，我用Arraylist
		List<Bean> list = new ArrayList<Bean>();

		//使用Dom4j读XML配置文档
		//创建SAXReader对象
		SAXReader reader = new SAXReader();
		Document doc;
		try {
			//获取整个配置文档的document对象
			doc =  reader.read(new File(path));
		} catch (DocumentException e) {
			e.printStackTrace();
			throw new RuntimeException("配置文件路径不对");
		}

		//拿到根标签——beans
		Element beans = (Element) doc.getRootElement();
		//根据根标签遍历所有的bean
		List<Element> beanList = beans.elements();
		for(Element e: beanList){
			//每一个根标签都是一个Bean对象，在这里实例化出来
			Bean bean = new Bean();
			//通过Element.attributeValue("属性名")方法，可以得到属性名对应的属性值
			//这里获取了id属性的值
			bean.setId(e.attributeValue("id"));
			//获取class属性的值
			bean.setClassName(e.attributeValue("class"));

			//这里得到每一个bean标签下的property标签集合
			List<Element> propertyList = e.elements("property");
			//每一个bean对象都有可能有多个property，所以这里用list装
			List<property> properties = new ArrayList<property>();
			//遍历propertyList
			for(Element pe : propertyList){
				//每一个 property也是一个类，这里把它实例化
				property property = new property();
				//赋值
				property.setName(pe.attributeValue("name"));
				property.setValue(pe.attributeValue("value"));
				property.setRef(pe.attributeValue("ref"));
				//System.out.println(property.toString());

				//最后用list装起来
				properties.add(property);
			}
			//把properties集合注入到bean对象里
			bean.setList(properties);
			//把bean对象放到list里
			list.add(bean);
		}
		//返回list集合
		return list;
	}


}
